<!DOCTYPE html>
<html lang="en">
<head>
  <title>DNS client - Vert.x</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <meta content="Vert.x is a tool-kit for building reactive applications on the JVM." name="description">
  <link href="http://vertx.io/stylesheets/docs.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/stylesheets/font-awesome.min.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/javascripts/styles/rainbow.min.css" media="screen" rel="stylesheet">
  <!-- IE 6-8 support of HTML 5 elements -->
  <!--[if lt IE 9]>
  <script src="http://static.jboss.org/theme/js/libs/html5/pre3.6/html5.min.js"></script>
  <![endif]-->

  <link rel="apple-touch-icon" sizes="57x57" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="http://vertx.io/assets/favicons/vertx-favicon-7/manifest.json">
  <link rel="mask-icon" href="http://vertx.io/assets/favicons/vertx-favicon-7/safari-pinned-tab.svg" color="#5bbad5">
  <meta name="msapplication-TileColor" content="#7d3194">
  <meta name="msapplication-TileImage" content="http://vertx.io/assets/favicons/vertx-favicon-7/mstile-144x144.png">
  <meta name="theme-color" content="#ffffff">

  <link href="http://fonts.googleapis.com/css?family=Ubuntu:400,500,700,400italic" rel="stylesheet" type="text/css">
  <link rel="alternate" type="application/rss+xml" title="RSS"
     href="http://vertx.io/feed.xml">
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-30144458-1', 'auto');
    ga('create', 'UA-71153120-1', 'auto', 'tracker');
    ga('send', 'pageview');
    ga('tracker.send', 'pageview');
  </script>
</head>
<body>

<a href="http://www.reactivemanifesto.org/" id="reactive-manifesto-banner">
  <img style="border: 0; position: fixed; right: 0; top:0; z-index: 9000"
    src="http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-black-right.png">
</a>

<a id="skippy" class="sr-only sr-only-focusable" href="#content"><div class="container"><span class="skiplink-text">Skip to main content</span></div></a>

<header class="navbar navbar-default navbar-static-top" id="top" role="banner">
  <div class="container">
    <div class="navbar-header">
      <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#vertx-navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="http://vertx.io/" class="navbar-brand"><img alt="Brand" src="http://vertx.io/assets/logo-sm.png"></a>
    </div>
    <nav class="collapse navbar-collapse" id="vertx-navbar-collapse">
      <ul class="nav navbar-nav navbar-right">
        <li><a href="http://vertx.io/download/">Download</a></li>
        <li><a href="http://vertx.io/docs/">Documentation</a></li>
        <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
        <li><a href="http://vertx.io/community/">Community</a></li>
        <li><a href="http://vertx.io/materials/">Materials</a></li>
        <li><a href="http://vertx.io/blog/">Blog</a></li>        
      </ul>
    </nav>
  </div>
</header>



  <div class="page-header" id="content">
    <div class="container">
      <div class="row">
        <div class="col-sm-12">
          <h1>DNS client</h1>
          
        </div>
      </div>
    </div>
  </div>




<div id="content">
  <div class="container docs-content">
    <div class="row">
      <div class="col-sm-12 col-md-push-9 col-md-3 hidden-xs hidden-sm">
        <div id="sidebar" data-spy="affix">
          <ul class="sectlevel1">
<li><a href="#_dns_client">DNS client</a>
<ul class="sectlevel2">
<li><a href="#_lookup">lookup</a></li>
<li><a href="#_lookup4">lookup4</a></li>
<li><a href="#_lookup6">lookup6</a></li>
<li><a href="#_resolvea">resolveA</a></li>
<li><a href="#_resolveaaaa">resolveAAAA</a></li>
<li><a href="#_resolvecname">resolveCNAME</a></li>
<li><a href="#_resolvemx">resolveMX</a></li>
<li><a href="#_resolvetxt">resolveTXT</a></li>
<li><a href="#_resolvens">resolveNS</a></li>
<li><a href="#_resolvesrv">resolveSRV</a></li>
<li><a href="#_resolveptr">resolvePTR</a></li>
<li><a href="#_reverselookup">reverseLookup</a></li>
<li><a href="#_error_handling">Error handling</a></li>
</ul>
</li>
</ul>
        </div>
      </div>
      <div class="col-sm-12 col-md-pull-3 col-md-9">
        <div class="toc hidden-md hidden-lg">
          <h2>Table of Contents</h2>
          <ul class="sectlevel1">
<li><a href="#_dns_client">DNS client</a>
<ul class="sectlevel2">
<li><a href="#_lookup">lookup</a></li>
<li><a href="#_lookup4">lookup4</a></li>
<li><a href="#_lookup6">lookup6</a></li>
<li><a href="#_resolvea">resolveA</a></li>
<li><a href="#_resolveaaaa">resolveAAAA</a></li>
<li><a href="#_resolvecname">resolveCNAME</a></li>
<li><a href="#_resolvemx">resolveMX</a></li>
<li><a href="#_resolvetxt">resolveTXT</a></li>
<li><a href="#_resolvens">resolveNS</a></li>
<li><a href="#_resolvesrv">resolveSRV</a></li>
<li><a href="#_resolveptr">resolvePTR</a></li>
<li><a href="#_reverselookup">reverseLookup</a></li>
<li><a href="#_error_handling">Error handling</a></li>
</ul>
</li>
</ul>
        </div>
        <div class="sect1">
<h2 id="_dns_client">DNS client</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Often you will find yourself in situations where you need to obtain DNS informations in an asynchronous fashion.</p>
</div>
<div class="paragraph">
<p>Unfortunally this is not possible with the API that is shipped with the Java Virtual Machine itself. Because of
this Vert.x offers it&#8217;s own API for DNS resolution which is fully asynchronous.</p>
</div>
<div class="paragraph">
<p>To obtain a DnsClient instance you will create a new via the Vertx instance.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")</code></pre>
</div>
</div>
<div class="paragraph">
<p>Be aware that you can pass in a varargs of InetSocketAddress arguments to specifiy more then one DNS Server to try
to query for DNS resolution. The DNS Servers will be queried in the same order as specified here. Where the next
will be used once the first produce an error while be used.</p>
</div>
<div class="sect2">
<h3 id="_lookup">lookup</h3>
<div class="paragraph">
<p>Try to lookup the A (ipv4) or AAAA (ipv6) record for a given name. The first which is returned will be used,
so it behaves the same way as you may be used from when using "nslookup" on your operation system.</p>
</div>
<div class="paragraph">
<p>To lookup the A / AAAA record for "vertx.io" you would typically use it like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.lookup("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    println(ar.result())
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_lookup4">lookup4</h3>
<div class="paragraph">
<p>Try to lookup the A (ipv4) record for a given name. The first which is returned will be used, so it behaves
the same way as you may be used from when using "nslookup" on your operation system.</p>
</div>
<div class="paragraph">
<p>To lookup the A record for "vertx.io" you would typically use it like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.lookup4("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    println(ar.result())
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_lookup6">lookup6</h3>
<div class="paragraph">
<p>Try to lookup the AAAA (ipv6) record for a given name. The first which is returned will be used, so it behaves the
same way as you may be used from when using "nslookup" on your operation system.</p>
</div>
<div class="paragraph">
<p>To lookup the A record for "vertx.io" you would typically use it like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.lookup6("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    println(ar.result())
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvea">resolveA</h3>
<div class="paragraph">
<p>Try to resolve all A (ipv4) records for a given name. This is quite similar to using "dig" on unix like operation
systems.</p>
</div>
<div class="paragraph">
<p>To lookup all the A records for "vertx.io" you would typically do:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveA("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolveaaaa">resolveAAAA</h3>
<div class="paragraph">
<p>Try to resolve all AAAA (ipv6) records for a given name. This is quite similar to using "dig" on unix like
operation systems.</p>
</div>
<div class="paragraph">
<p>To lookup all the AAAAA records for "vertx.io" you would typically do:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveAAAA("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvecname">resolveCNAME</h3>
<div class="paragraph">
<p>Try to resolve all CNAME records for a given name. This is quite similar to using "dig" on unix like operation
systems.</p>
</div>
<div class="paragraph">
<p>To lookup all the CNAME records for "vertx.io" you would typically do:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveCNAME("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvemx">resolveMX</h3>
<div class="paragraph">
<p>Try to resolve all MX records for a given name. The MX records are used to define which Mail-Server accepts
emails for a given domain.</p>
</div>
<div class="paragraph">
<p>To lookup all the MX records for "vertx.io" you would typically do:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveMX("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
<div class="paragraph">
<p>Be aware that the List will contain the <code><a href="../../groovydoc/io/vertx/groovy/core/dns/MxRecord.html">MxRecord</a></code> sorted by the priority of them, which
means MX records with smaller priority coming first in the List.</p>
</div>
<div class="paragraph">
<p>The <code><a href="../../groovydoc/io/vertx/groovy/core/dns/MxRecord.html">MxRecord</a></code> allows you to access the priority and the name of the MX record by offer methods for it like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">record.priority()
record.name()</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvetxt">resolveTXT</h3>
<div class="paragraph">
<p>Try to resolve all TXT records for a given name. TXT records are often used to define extra informations for a domain.</p>
</div>
<div class="paragraph">
<p>To resolve all the TXT records for "vertx.io" you could use something along these lines:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveTXT("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvens">resolveNS</h3>
<div class="paragraph">
<p>Try to resolve all NS records for a given name. The NS records specify which DNS Server hosts the DNS informations
for a given domain.</p>
</div>
<div class="paragraph">
<p>To resolve all the NS records for "vertx.io" you could use something along these lines:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveNS("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_resolvesrv">resolveSRV</h3>
<div class="paragraph">
<p>Try to resolve all SRV records for a given name. The SRV records are used to define extra informations like port and
hostname of services. Some protocols need this extra informations.</p>
</div>
<div class="paragraph">
<p>To lookup all the SRV records for "vertx.io" you would typically do:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolveSRV("vertx.io", { ar -&gt;
  if (ar.succeeded()) {
    def records = ar.result()
    records.each { record -&gt;
      println(record)
    }
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
<div class="paragraph">
<p>Be aware that the List will contain the SrvRecords sorted by the priority of them, which means SrvRecords
with smaller priority coming first in the List.</p>
</div>
<div class="paragraph">
<p>The <code><a href="../../groovydoc/io/vertx/groovy/core/dns/SrvRecord.html">SrvRecord</a></code> allows you to access all informations contained in the SRV record itself:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">record.priority()
record.name()
record.weight()
record.port()
record.protocol()
record.service()
record.target()</code></pre>
</div>
</div>
<div class="paragraph">
<p>Please refer to the API docs for the exact details.</p>
</div>
</div>
<div class="sect2">
<h3 id="_resolveptr">resolvePTR</h3>
<div class="paragraph">
<p>Try to resolve the PTR record for a given name. The PTR record maps an ipaddress to a name.</p>
</div>
<div class="paragraph">
<p>To resolve the PTR record for the ipaddress 10.0.0.1 you would use the PTR notion of "1.0.0.10.in-addr.arpa"</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.resolvePTR("1.0.0.10.in-addr.arpa", { ar -&gt;
  if (ar.succeeded()) {
    def record = ar.result()
    println(record)
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_reverselookup">reverseLookup</h3>
<div class="paragraph">
<p>Try to do a reverse lookup for an ipaddress. This is basically the same as resolve a PTR record, but allows you to
just pass in the ipaddress and not a valid PTR query string.</p>
</div>
<div class="paragraph">
<p>To do a reverse lookup for the ipaddress 10.0.0.1 do something similar like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "10.0.0.1")
client.reverseLookup("10.0.0.1", { ar -&gt;
  if (ar.succeeded()) {
    def record = ar.result()
    println(record)
  } else {
    println("Failed to resolve entry${ar.cause()}")
  }
})</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_error_handling">Error handling</h3>
<div class="paragraph">
<p>As you saw in previous sections the DnsClient allows you to pass in a Handler which will be notified with an
AsyncResult once the query was complete.</p>
</div>
<div class="paragraph">
<p>In case of an error it will be notified with a DnsException which will
hole a <code><a href="../../vertx-core/enums.html#DnsResponseCode">DnsResponseCode</a></code> that indicate why the resolution failed. This DnsResponseCode
can be used to inspect the cause in more detail.</p>
</div>
<div class="paragraph">
<p>Possible DnsResponseCodes are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code><a href="todo">NOERROR</a></code> No record was found for a given query</p>
</li>
<li>
<p><code><a href="todo">FORMERROR</a></code> Format error</p>
</li>
<li>
<p><code><a href="todo">SERVFAIL</a></code> Server failure</p>
</li>
<li>
<p><code><a href="todo">NXDOMAIN</a></code> Name error</p>
</li>
<li>
<p><code><a href="todo">NOTIMPL</a></code> Not implemented by DNS Server</p>
</li>
<li>
<p><code><a href="todo">REFUSED</a></code> DNS Server refused the query</p>
</li>
<li>
<p><code><a href="todo">YXDOMAIN</a></code> Domain name should not exist</p>
</li>
<li>
<p><code><a href="todo">YXRRSET</a></code> Resource record should not exist</p>
</li>
<li>
<p><code><a href="todo">NXRRSET</a></code> RRSET does not exist</p>
</li>
<li>
<p><code><a href="todo">NOTZONE</a></code> Name not in zone</p>
</li>
<li>
<p><code><a href="todo">BADVERS</a></code> Bad extension mechanism for version</p>
</li>
<li>
<p><code><a href="todo">BADSIG</a></code> Bad signature</p>
</li>
<li>
<p><code><a href="todo">BADKEY</a></code> Bad key</p>
</li>
<li>
<p><code><a href="todo">BADTIME</a></code> Bad timestamp</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>All of those errors are "generated" by the DNS Server itself.</p>
</div>
<div class="paragraph">
<p>You can obtain the <code>DnsResponseCode</code> from the <code>DnsException</code> like:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">def client = vertx.createDnsClient(53, "8.8.8.8");
client.lookup("missing.vertx.io", { ar -&gt;
 if (ar.succeeded()) {
   def record = ar.result();
   println "record: " + record;
 } else {
   def cause = ar.cause();
   if (cause instanceof DnsException) {
   def code = cause.code();
   println "Code : " + code
   // ...
   } else {
     println("Failed to resolve entry" + ar.cause());
   }
 }
})</code></pre>
</div>
</div>
</div>
</div>
</div>

        

        
          <div id="footer">
            <div id="footer-text">
              
                Last updated 2016-09-12 08:38:04 CEST
              
              
            </div>
          </div>
        
      </div>
    </div>
  </div>
</div>

<footer>
  <div class="container">
    <div class="row">
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Vert.x</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/">Home</a></li>
          <li><a href="http://vertx.io/download/">Download</a></li>
          <li><a href="http://vertx.io/docs/">Documentation</a></li>
          <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
          <li><a href="http://vertx.io/blog/">Blog</a></li>
          <li><a href="http://vertx.io/vertx2/" class="vertx-2-link">Vert.x 2</a></li>
        </ul>
      </div>
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Community</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/community/">Help &amp; Contributors</a></li>
          <li><a href="http://vertx.io/materials/">Learning materials</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx">User Group</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx-dev">Developer Group</a></li>
        </ul>
      </div>

      <div class="col-xs-12 col-sm-6 col-lg-offset-2 col-md-6 copyright">
        <p>Vert.x is open source and dual licensed under the <a href="https://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License 1.0</a> and <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>.</p>
        <p>This website is licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 License</a>.<br>
        Design by <a href="http://www.michel-kraemer.com">Michel Kr&auml;mer</a>. <a href="http://www.entypo.com">Entypo pictograms</a> by Daniel Bruce.</p>
        <div class="row">
          <div class="col-xs-12 col-lg-offset-1 col-md-5">
            <a href="http://eclipse.org">
            <img class="logo eclipse-logo" src="http://vertx.io/assets/eclipse_logo_grey_small.png" width="204" height="48">
            </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-0 col-md-5">
            <a href="http://cloudbees.com">
            <img class="logo cloudbees-logo" src="http://vertx.io/assets/Button-Built-on-CB-1-grey.png" width="180" height="48">
           </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-1 col-md-5 jprofiler">
            <a href="http://www.ej-technologies.com/products/jprofiler/overview.html"
            style="text-decoration:none">
            <img class="logo jprofiler-logo" src="http://vertx.io/assets/jprofiler-logo.png" width="48" height="48"><span class="jprofiler-logo">&nbsp; JPROFILER</span>
            </a>
          </div>
        </div>
      </div>
    </div>
  </div>
</footer>

<script src="http://static.jboss.org/theme/js/libs/jquery/jquery-1.9.1.min.js"></script>
<script src="http://vertx.io/javascripts/bootstrap.min.js"></script>
<script src="http://vertx.io/javascripts/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



<script src="http://vertx.io/javascripts/sidebar.js"></script>


</body>
</html>
